Cocos2d-x Basics
Scene
Scene is game scene.
You need add at least one scene in your game.
This example is blank scene.
HellWorld.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::Layer
{
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// implement the "static create()" method manually
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
HelloWorld.cpp
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
// Add layout
}
If you want to add new scene, you need to add file name to jni/Android.mk
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
Label
auto label = LabelTTF::create("Hello World", "Arial", 24);
// position the label on the center of the screen
label->setPosition(Vec2(origin.x + visibleSize.width/2,
origin.y + visibleSize.height - label->getContentSize().height));
// add the label as a child to this layer
this->addChild(label, 1);
Resources
You need to add any images in Resources file in your project root.
In android, images in this directory are copied to assets directory.
Node Enumeration
parent->enumerateChildren("point",[](Node* node) -> bool {
// You can get children nodes named "point" as Node class
return false;
}
Get node by name
Label *title = (Label *)this->getChildByName("title"); // Only one node
Get Current scene and evaluation
Vector<cocos2d::Node *> layers = CCDirector::sharedDirector()->getRunningScene()->getChildren();
for (int i=0; i < layers.size(); i++) {
Node *node = layers.at(i);
if (instanceof<GamePlayScene>(node)) {
//((GamePlayScene *)node)->emergeNativeNode(point);
// The Node is Game scene
}
}
instanceof is class check method, please see instanceOf
String format
Use createWithFormat
const auto str_index = String::createWithFormat("%s%d.png", name, number);
